CROSS REFERENCE TO RELATED APPLICATION
The present invention is related to an application entitled Method and Apparatus For Optimizing Execution of Java Programs, application Ser. No. 09/126,282 filed even date hereof, assigned to the same assignee and incorporated herein by reference.
1. Technical Field
The present invention relates generally to an improved data processing system and in particular to an improved method and apparatus for optimizing execution of code in a data processing system. Still more particularly, the present invention relates to a method and apparatus for optimizing execution of code in a data processing system using code optimized for a particular runtime environment in a data processing system.
2. Description of Related Art
A computer includes both a physical machine, namely the hardware, and the instructions which cause the physical machine to operate, namely the software. Software includes both application and operating system programs. If the program is simply to do tasks for a user, such as solving specific problems, it is referred to as application software. If a program controls the hardware of the computer and the execution of the application programs, it is called operating system software. System software further includes the operating system, the program that controls the actual computer or central processing unit (CPU), and device drivers that control the input and output devices (I/O) such as printers and terminals.
A number of application programs are usually present waiting to use the CPU. The operating system determines which program will run next, how much of the CPU time it will be allowed to use, and what other computer resources the application will be allowed to access and use. Further, each application program will require a special input or output device and the application program must transfer its data to the operating system, which controls the device drivers.
A network containing a number of computers may be formed by having these computers, also referred to as "nodes" or "network computers", communicate with each other over one or more communications links, which is an aggregation which is a computer network. Today, many computer workstations are connected to other workstations, file servers, or other resources in a network. Each computer on a network is connected to the network via an adapter card or other similar means, which provides an ability to establish a communications link to the network.
In corporations, client/server technology is employed in networks to provide a sharing of processing load between a client and a server on a network. Client computers request data and services from a server computer. Client computers may take the form of a network computer (NC), which typically contains fewer components than many personal computers. For example, a network computer may be diskless or have only a single storage device, such as a hard disk drive. Applications are often sent to a network computer from the server. Java applications are becoming increasingly more prevalent as the type of application sent between server and client computers. Java applications are common on the Internet and becoming more increasingly common in intranets and in other types of networks used in corporations.
Java is an object oriented programming language and environment focusing on defining data as objects and the methods that may be applied to those objects. Java supports only a single inheritance, meaning that each class can inherit from only one other class at any given time. Java also allows for the creation of totally abstract classes known as interfaces, which allow the defining of methods that may be shared with several classes without regard for how other classes are handling the methods.
The Java virtual machine (JVM) is a virtual computer component that resides only in memory. The JVM allows Java programs to be executed on a different platforms as opposed to only the one platform for which the code was compiled. Java programs are compiled for the JVM. In this manner, Java is able to support applications for many types of data processing systems, which may contain a variety of central processing units and operating systems architectures. To enable a Java application to execute on different types of data processing systems, a compiler typically generates an architecture-neutral file format--the compiled code is executable on many processors, given the presence of the Java run-time system. The Java compiler generates bytecode instructions that are non-specific to a particular computer architecture. A bytecode is a machine independent code generated by the Java compiler and executed by a Java interpreter. A Java interpreter is a module in the JVM that alternately denodes and executes a bytecode or bytecodes. These bytecode instructions are designed to be easy to interpret on any computer and easily translated on the fly into native machine code.
With the increasing use of network computers having limited processor speed, limited memory, little or no virtual memory support, and/or no secondary storage for temporary files, various run time technologies used in Java are limited or unavailable. For example, just-in-time (JIT) compilers are an example of a run-time technology used to increase the performance of Java programs. A JIT compiler provides an increase in performance by compiling methods into native machine instructions before executing them. The advantages of a JIT compiler are unavailable to many network computers because JIT compiler implementations require significant data processing resources, such as processing power and memory, to provide increase performance. Therefore, it would be advantageous to have an improved method and apparatus for increasing performance of Java programs without requiring significant data processing resources.